linyongji преди 4 години
родител
ревизия
79f5bc63fa
променени са 12 файла, в които са добавени 129 реда и са изтрити 3 реда
  1. +6
    -0
      .gitignore
  2. Двоични данни
      Alogrithm/.vs/Alogrithm/v16/.suo
  3. +4
    -0
      Alogrithm/Alogrithm/Alogrithm.vcxproj
  4. +9
    -0
      Alogrithm/Alogrithm/Alogrithm.vcxproj.filters
  5. +16
    -0
      Alogrithm/Alogrithm/config/17_WordBreak.ini
  6. +6
    -0
      Alogrithm/Alogrithm/include/17_WordBreak.h
  7. +44
    -0
      Alogrithm/Alogrithm/src/17_WordBreak.cpp
  8. +0
    -2
      Alogrithm/Alogrithm/src/main.cpp
  9. +23
    -0
      Alogrithm/UnitTest/UnitTest.cpp
  10. +1
    -1
      Alogrithm/UnitTest/UnitTest.vcxproj
  11. +18
    -0
      Alogrithm/UnitTest/pch.cpp
  12. +2
    -0
      Alogrithm/UnitTest/pch.h

+ 6
- 0
.gitignore Целия файл

@@ -154,3 +154,9 @@ Alogrithm/.vs/Alogrithm/v16/ipch/AutoPCH/5ccdb9c64312b2ee/16_REVERSEBITS.ipch
Alogrithm/.vs/Alogrithm/v16/ipch/AutoPCH/969dd2cbf6a00d1b/16_REVERSEBITS.ipch
Alogrithm/.vs/Alogrithm/v16/TestStore/0/003.testlog
Alogrithm/Alogrithm/Debug/16_ReverseBits.obj
Alogrithm/.vs/Alogrithm/v16/ipch/AutoPCH/13d1a063a12e2911/17_WORDBREAK.ipch
Alogrithm/Alogrithm/Debug/17_WordBreak.obj
*.tlog
*.coverage
*.testlog
*.ipch

Двоични данни
Alogrithm/.vs/Alogrithm/v16/.suo Целия файл


+ 4
- 0
Alogrithm/Alogrithm/Alogrithm.vcxproj Целия файл

@@ -89,6 +89,7 @@
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>false</ConformanceMode>
<ModuleOutputFile>$(IntDir)%(RelativeDir)</ModuleOutputFile>
<LanguageStandard_C>stdc11</LanguageStandard_C>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@@ -148,6 +149,7 @@
<ClCompile Include="src\14_SingleNumber.cpp" />
<ClCompile Include="src\15_WordPattern.cpp" />
<ClCompile Include="src\16_ReverseBits.cpp" />
<ClCompile Include="src\17_WordBreak.cpp" />
<ClCompile Include="src\1_ContainsNearbyDuplicate.cpp" />
<ClCompile Include="src\2_ExcelSheetColumnTitle.cpp" />
<ClCompile Include="src\3_bool IsUgly.cpp" />
@@ -167,6 +169,7 @@
<ClInclude Include="include\14_SingleNumber.h" />
<ClInclude Include="include\15_WordPattern.h" />
<ClInclude Include="include\16_ReverseBits.h" />
<ClInclude Include="include\17_WordBreak.h" />
<ClInclude Include="include\1_ContainsNearbyDuplicate.h" />
<ClInclude Include="include\2_ExcelSheetColumnTitle.h" />
<ClInclude Include="include\3_bool IsUgly.h" />
@@ -185,6 +188,7 @@
<None Include="config\14_SingleNumber.ini" />
<None Include="config\15_WordPattern.ini" />
<None Include="config\16_ReverseBits.ini" />
<None Include="config\17_WordBreak.ini" />
<None Include="config\1_ContainsNearbyDuplicate.ini" />
<None Include="config\2_ExcelSheetColumnTiTle.ini" />
<None Include="config\3_bool IsUgly.ini" />


+ 9
- 0
Alogrithm/Alogrithm/Alogrithm.vcxproj.filters Целия файл

@@ -75,6 +75,9 @@
<ClCompile Include="src\16_ReverseBits.cpp">
<Filter>源文件\src</Filter>
</ClCompile>
<ClCompile Include="src\17_WordBreak.cpp">
<Filter>源文件\src</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="include\2_ExcelSheetColumnTitle.h">
@@ -125,6 +128,9 @@
<ClInclude Include="include\16_ReverseBits.h">
<Filter>头文件\include</Filter>
</ClInclude>
<ClInclude Include="include\17_WordBreak.h">
<Filter>头文件\include</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="config\3_bool IsUgly.ini">
@@ -175,5 +181,8 @@
<None Include="config\16_ReverseBits.ini">
<Filter>资源文件\config</Filter>
</None>
<None Include="config\17_WordBreak.ini">
<Filter>资源文件\config</Filter>
</None>
</ItemGroup>
</Project>

+ 16
- 0
Alogrithm/Alogrithm/config/17_WordBreak.ini Целия файл

@@ -0,0 +1,16 @@
[Test1]
Input1=cppcode
Input2=cpp,code
Output=1
[Test2]
Input1=catsanddog
Input2=cats,sand,dog
Output=0
[Test3]
Input1=catsanddog
Input2=cats,and,dog
Output=1
[Test4]
Input1=catsanddog
Input2=cats,and,dog
Output=1

+ 6
- 0
Alogrithm/Alogrithm/include/17_WordBreak.h Целия файл

@@ -0,0 +1,6 @@
#pragma once
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

bool WordBreak(char* s, char** wordDict, int wordDictSize);

+ 44
- 0
Alogrithm/Alogrithm/src/17_WordBreak.cpp Целия файл

@@ -0,0 +1,44 @@
#include "../include/17_WordBreak.h"
//题目:给定一个非空字符串s和一个包含非空单词列表的字典wordDict,
// 判定s是否可以被空格拆分为一个或多个在字典中出现的单词
//思路:从字符串s的第一个字符开始,拿s的前word_len个字符和字典中的元素比较,如果匹配到相同的,则对应的枚举位置1
// 每次枚举位置1前先考虑上一位是否为也为1,如果不为1就置0,一直到最后一个字符,返回最后一个字符的枚举dp[s_len]
bool WordBreak(char* s, char** wordDict, int wordDictSize) {
int s_len = strlen(s); // 获取s的长度
//异常情况判断
if (wordDict == NULL || wordDictSize == 0 || s == NULL) {
return false;
}
// 定义一个dp数组,表示当前下标时前面的字母是否可以满足被拆分条件,并都初始化为false
bool *dp = (bool *)malloc(sizeof(bool)*(s_len + 1));
memset(dp, false, sizeof(bool) * (s_len + 1));
dp[0] = true; // 0需要被初始化为true

// 从第一个字母开始往后遍历
for (int i = 1; i <= s_len; i++) {
// 从第一个单词开始遍历
for (int j = 0; j < wordDictSize; j++) {
// 获取当前比较的单词长度
int word_len = strlen(wordDict[j]);
// s当前位置往前退word_len个位置开始和worDict进行比较是否相等
int k = i - word_len; //k同时也用来访问dp[]的上一次的状态
// k < 0表示退过头了,肯定不满足条件
if (k < 0) {
continue;
}
// 如果当前i位置和当前比较的wordDict正好相等,那么前提是k位置之前也要都满足条件,否则前面的不满足,即使现在从k~i满足也没有用
if (strncmp(s + k, wordDict[j], word_len) == 0) {
dp[i] = (dp[k] && dp[0]);
}
// 如果i位置满足条件了,则不需要再比较后面的worDict了,直接比较下一个i的位置即可
if (dp[i] == 1) {
break;
}
}
}
for (int t = 0; t < s_len; t++)
printf("%d ", dp[t]);
// 返回s最后一个位置是否满足切分条件即可
return dp[s_len];

}

+ 0
- 2
Alogrithm/Alogrithm/src/main.cpp Целия файл

@@ -1,9 +1,7 @@
#include<stdio.h>
#include "../include/16_ReverseBits.h"


int main()
{
printf("%ld\n", ReverseBits(1));
return 0;
}

+ 23
- 0
Alogrithm/UnitTest/UnitTest.cpp Целия файл

@@ -18,6 +18,7 @@ using namespace Microsoft::VisualStudio::CppUnitTestFramework;
#define FileName_14 "../Alogrithm/config/14_SingleNumber.ini"
#define FileName_15 "../Alogrithm/config/15_WordPattern.ini"
#define FileName_16 "../Alogrithm/config/16_ReverseBits.ini"
#define FileName_17 "../Alogrithm/config/17_WordBreak.ini"


namespace UnitTest
@@ -310,4 +311,26 @@ namespace UnitTest
}
}
};
TEST_CLASS(UnitTest_17)
{
TEST_METHOD(TestMethode1)
{
char Section_Name[100][10] = { 0 };
int Section_Count = CalcCount(100, Section_Name, FileName_17);
CString Input1, Input2,Output;
char Str_char[1024] = { 0 };
char *WordDic[100];
for (int i = 0; i < Section_Count; i++) {
GetPrivateProfileString(Section_Name[i], "Input1", " ", Input1.GetBuffer(200), 200, FileName_17);
GetPrivateProfileString(Section_Name[i], "Input2", " ", Input2.GetBuffer(500), 500, FileName_17);
GetPrivateProfileString(Section_Name[i], "Output", " ", Output.GetBuffer(20), 20, FileName_17);

strcpy(Str_char, Input1);
int Wordic_count = str_device3(Input2, WordDic);
bool nReal = WordBreak(Str_char, WordDic, Wordic_count);
Assert::AreEqual(nReal, CstrToBool(Output));
}

}
};
}

+ 1
- 1
Alogrithm/UnitTest/UnitTest.vcxproj Целия файл

@@ -103,7 +103,7 @@
<SubSystem>Windows</SubSystem>
<AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
<AdditionalDependencies>../Alogrithm/Debug/1_ContainsNearbyDuplicate.obj;../Alogrithm/Debug/2_ExcelSheetColumnTitle.obj;../Alogrithm/Debug/3_bool IsUgly.obj;../Alogrithm/Debug/4_IsPalindrome.obj;../Alogrithm/Debug/5_MinDepth.obj;../Alogrithm/Debug/6_ContainsDuplicate.obj;../Alogrithm/Debug/7_MaxDepth.obj;../Alogrithm/Debug/8_HammingWeight.obj;../Alogrithm/Debug/9_AddBinary.obj;../Alogrithm/Debug/10_BinaryTreePaths.obj;../Alogrithm/Debug/11_CanWinNim.obj;../Alogrithm/Debug/12_IsValid.obj;../Alogrithm/Debug/13_MyAtoi.obj;../Alogrithm/Debug/14_SingleNumber.obj;../Alogrithm/Debug/15_WordPattern.obj;../Alogrithm/Debug/16_ReverseBits.obj;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>../Alogrithm/Debug/1_ContainsNearbyDuplicate.obj;../Alogrithm/Debug/2_ExcelSheetColumnTitle.obj;../Alogrithm/Debug/3_bool IsUgly.obj;../Alogrithm/Debug/4_IsPalindrome.obj;../Alogrithm/Debug/5_MinDepth.obj;../Alogrithm/Debug/6_ContainsDuplicate.obj;../Alogrithm/Debug/7_MaxDepth.obj;../Alogrithm/Debug/8_HammingWeight.obj;../Alogrithm/Debug/9_AddBinary.obj;../Alogrithm/Debug/10_BinaryTreePaths.obj;../Alogrithm/Debug/11_CanWinNim.obj;../Alogrithm/Debug/12_IsValid.obj;../Alogrithm/Debug/13_MyAtoi.obj;../Alogrithm/Debug/14_SingleNumber.obj;../Alogrithm/Debug/15_WordPattern.obj;../Alogrithm/Debug/16_ReverseBits.obj;../Alogrithm/Debug/17_WordBreak.obj;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">


+ 18
- 0
Alogrithm/UnitTest/pch.cpp Целия файл

@@ -88,6 +88,24 @@ int str_device2(CString str, char(*return_str)[50])
}
return value_count; //返回数组首地址
}
int str_device3(CString str, char* *return_str)
{
int value_count = 0;
char* token; //存放被切割后的第一个子串
char Section_value[500] = { 0 };//存放nums转换成string类型的结果
memset(Section_value, 0, sizeof(char) * 500);
strcpy(Section_value, str);//将CString类型的字符串转换成char类型,方便后面切割字符串
//获得切割到的第一个字符串
token = strtok(Section_value, ",");
/* 继续获取其他的子字符串 */
while (token != NULL) {
return_str[value_count] = (char*)malloc(sizeof(char) * 100);
strcpy(return_str[value_count], token);
token = strtok(NULL, ",");
value_count++; //记录存了多少个元素
}
return value_count; //返回数组首地址
}
//字符串转bool
bool CstrToBool(CString str)
{


+ 2
- 0
Alogrithm/UnitTest/pch.h Целия файл

@@ -29,11 +29,13 @@
#include"../Alogrithm/include/14_SingleNumber.h"
#include"../Alogrithm/include/15_WordPattern.h"
#include"../Alogrithm/include/16_ReverseBits.h"
#include"../Alogrithm/include/17_WordBreak.h"


int CalcCount(int n, char(*str)[10],const char *FileName);
int* str_device(CString str, int* value_count);
int str_device2(CString str, char(*return_str)[50]);
int str_device3(CString str, char**return_str);
bool CstrToBool(CString str);




||||||
x
 
000:0
Зареждане…
Отказ
Запис