zoukankan      html  css  js  c++  java
  • poj 1035

    字符串的蛋疼问题,和两个字符串的相似度的算法不一样,只需要判断一个的就可以了,否则会超时的

      1 #include <iostream>
      2 #include <string>
      3 #include <vector>
      4 #include <cstdlib>
      5 #include <cmath>
      6 #include <map>
      7 #include <algorithm>
      8 #include <list>
      9 #include <ctime>
     10 #include <set>
     11 #include <cstring>
     12 #include <queue>
     13 #include <cstdio>
     14 #include <stack>
     15 using namespace std;
     16 bool addone(const string& source, const string& target, int& ssz, int& tsz) {
     17     if (ssz != (tsz - 1)) {
     18         return false;
     19     } else {
     20         int tol = 0;
     21         int j = 0;
     22         for (int i = 0; i < tsz;) {
     23             if (source[i] == target[j]) {
     24                 i++;
     25                 j++;
     26             } else {
     27                 j++;
     28                 tol++;
     29                 if (tol > 1) {
     30                     return false;
     31                 }
     32             }
     33         }
     34         return true;
     35     }
     36 }
     37 bool delone(const string& source, const string& target, int& ssz, int& tsz) {
     38     return addone(target, source, tsz, ssz);
     39 }
     40 bool mutone(const string& source, const string& target, int& ssz, int& tsz) {
     41     if (ssz != tsz) {
     42         return false;
     43     } else {
     44         int tol = 0;
     45         for (int i = 0; i < ssz; i++) {
     46             if (source[i] != target[i]) {
     47                 tol++;
     48                 if (tol > 1) {
     49                     return false;
     50                 }
     51             }
     52         }
     53         return true;
     54     }
     55 }
     56 int EditDistance(const string& source, const string& target) {
     57     bool j1, j2, j3;
     58     int ssz = source.size();
     59     int tsz = target.size();
     60     int off=ssz>tsz?(ssz-tsz):(tsz-ssz);
     61     if(1<off)
     62         return false;
     63     j1 = addone(source, target, ssz, tsz);
     64     if (j1)
     65         return true;
     66     j2 = delone(source, target, ssz, tsz);
     67     if (j2)
     68         return true;
     69     j3 = mutone(source, target, ssz, tsz);
     70     if (j3)
     71         return true;
     72     return false;
     73 }
     74 int main() {
     75     int sz, dist, exist;
     76     string tmp;
     77     vector<string> dic;
     78     cin >> tmp;
     79     while (tmp != "#") {
     80         dic.push_back(tmp);
     81         cin >> tmp;
     82     }
     83     sz = dic.size();
     84     int sz2;
     85     cin >> tmp;
     86     vector<string> res;
     87     while (tmp != "#") {
     88         exist = 0;
     89         res.clear();
     90         for (int i = 0; i < sz; i++) {
     91             dist = EditDistance(dic[i], tmp);
     92             if (1 == dist) {
     93                 res.push_back(dic[i]);
     94             }
     95             if (dic[i] == tmp) {
     96                 exist = 1;
     97                 break;
     98             }
     99         }
    100         if (1 == exist) {
    101             cout << tmp << " is correct\n";
    102         } else {
    103             sz2 = res.size();
    104             cout << tmp << ":";
    105             for (int a = 0; a < sz2; a++) {
    106                 cout << " " << res[a];
    107             }
    108             cout << endl;
    109         }
    110         cin >> tmp;
    111     }
    112     return 0;
    113 }

    from kakamilan

  • 相关阅读:
    java String类为什么是final的
    socket servlet webservice 区别及使用场景
    cxf CXF搭建webService服务器
    搭建maven项目
    在myeclipse中maven遇见的问题
    Mybatis foreach
    SpringMVC之HttpMessageConverter
    SpringMVC Model,ModelMap ModelAndView
    如何不用 transition 和 animation 也能做网页动画
    如何用纯 CSS 绘制一个世界上不存在的彭罗斯三角形
  • 原文地址:https://www.cnblogs.com/kakamilan/p/3082695.html
Copyright © 2011-2022 走看看